package com.dormitory.managemnet.util.utils;

import org.springframework.util.DigestUtils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class MD5Util {

    private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    /**
     * 对字符串进行md5加密，默认使用UTF-8编码
     * @param str 需要加密的字符串
     * @return 返回md5加密后的字符串
     */
    public static String encrypt(String str){
        return MD5(str,StandardCharsets.UTF_8);
    }

    /**
     * 对字符串进行带盐加密
     * @param str 要加密的字符串
     * @param salt 要加密的盐
     * @return 返回md5带盐加密的字符串
     */
    public static String encrypt(String str,String salt){
        return MD5(salt + str,StandardCharsets.UTF_8);
    }

    /**
     * 解密字符串
     * @param password 数据库中的密码
     * @param salt 数据库中的盐
     * @param inputPassword 用于判断一致性的字符串
     * @return
     */
    public static boolean decrypt(String password,String salt,String inputPassword){
        return password.equals(encrypt(salt + inputPassword));
    }

    /**
     * 解密字符串
     * @param inputPassword 用户输入的密码
     * @param salt 数据库中的盐
     * @return 返回加密后的md5
     */
    public static String decrypt(String inputPassword,String salt){
        return encrypt(inputPassword, salt);
    }

    /**
     * 对字符串进行MD5加密
     *
     * @param text 明文
     * @param charset 指定编码
     * @return 密文
     */
    public static String MD5(String text, Charset charset) {
        return DigestUtils.md5DigestAsHex(text.getBytes(charset));
    }

}
